//
//  OAuthViewController.swift
//  ZMWB
//
//  Created by 朱敏 on 2017/10/26.
//  Copyright © 2017年 朱敏. All rights reserved.
//

import UIKit

class OAuthViewController: UIViewController {

    @IBOutlet weak var customWebView: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // 1.定义字符串保存登录界面URL
        let urlStr = "https://open.weibo.cn/oauth2/authorize?client_id=1614045786&redirect_uri=http://www.520it.com"
        // 2.创建URL
        guard let url = URL(string: urlStr) else {
            return
        }
        // 3.创建Request
        let request = URLRequest(url: url)
        // 4.加载登录界面
        customWebView.loadRequest(request)
    }

}

extension OAuthViewController: UIWebViewDelegate {
    // 该方法每次请求都会调用
    // 如果返回false代表不允许请求，如果返回true代表允许请求
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        /* 通过观察
         1.如果是授权成功获取失败都会跳转到授权回调页面
         2.如果授权回调页面包含code=就代表授权成功，需要截取code= 后面的字符串
         3.如果是授权回调页面，不需要显示给用户看，返回false
         */
        // 1.判断当前是否是授权回调页面
        guard let urlStr = request.url?.absoluteString else {
            return false
        }
        if !urlStr.hasPrefix("http://www.520it.com") {
            ZMLog(message: "不是授权回调页面")
            return true
        }
        ZMLog(message: "是授权回调页面")
        // 2.判断授权回调地址中是否包含code=
        let key = "code="
        if urlStr.contains(key) {
            let code = request.url?.query?.substring(from: key.endIndex)
            loadAccessToken(code: code)
            return false
        }
        ZMLog(message: "授权失败")
        return false
    }
    
    private func loadAccessToken(codeStr: String?) {
        guard let code = codeStr else {
            return
        }
        // 1.准备请求路径
        let path = "oauth2/access_token"
        // 2.准备请求参数
        let parameters = ["client_id":"1614045786", "client_secret":"6c5a6a10027f71f220ddd1c5a31db59c", "grant_type":"authorization_code", "code":code, "redirect_uri":""]
        
        // 3.发送POST请求
    }
}
